GuardDutyでルートアカウントの利用を検知する
AWSアカウントを作成すると、ユーザー名がメールアドレスのルートアカウントが作成されます。ルートアカウントは権限が強力なので、普段は利用せずに適切な権限のIAMユーザーの利用することが推奨されます。GuardDutyにはPolicy:IAMUser/RootCredentialUsageというイベントがあり、AWS API がルート認証情報を使用して呼び出されたことを検知できます。本当に呼び出せるのか、呼び出された場合にどのような調査ができるのかご紹介します。本検証はプライベートで利用しているAWSアカウントを利用しました。
ルートアカウントでAWSコンソールに接続する
GuardDutyを有効にし、ルートアカウントでAWSコンソールに接続します。GuardDutyコンソールをみると、「Policy:IAMUser/RootCredentialUsage」が作成されたことがわかります。
イベントの詳細のActorから、IPアドレスを確認できます。東京オフィスからの接続のため、IPアドレスの国はJapanと判定されています。
GuardDutyで検知すると、CloudWatch Eventsが発火するため、SNSで通知したり、LambdaでSlackに通知できます。執筆時点でベータ版ですが、AWS Chatbotを使えば、Lambdaを作らなくてもSlackに通知できるようです。
CloudTrailログを確認する
ルートアカウントの利用が認められた場合、どのような操作が行われたのか確認したくなるかと思います。CloudTrailログをS3に出力している場合は、Athenaで解析できます。まずは、Athenaのテーブルを作成します。CloudTrailコンソール>イベント履歴>"Amazon Athena で高度なクエリを実行します"を選択します。
CloudTrailログを保存しているS3バケットを指定すると、テーブルが作成されます。
Athenaコンソールに移動し、以下のクエリを実行します。TableName
は作成されたテーブル名に置き換えてください。
SELECT * FROM TableName WHERE userIdentity.type = 'Root' ORDER BY eventtime DESC
クエリ結果を確認します。Rootユーザーで、AWS ConfigやEC2を操作していることがわかります。
余談ですが、クエリを作成する際はCloudTrail レコードの内容やCloudTrail userIdentity エレメントが参考になります。
まとめ
GuardDutyを有効化しておけば、ルートアカウントが利用された際に気が付けます。また、CloudTrailログをS3に出力しておけば、GuardDutyで検知した後にAthenaで調査できます。GuardDutyとCLoudTrailのログ出力を有効にし、ルートアカウントが不正に使われていないか確認しましょう。